package com.zp.self.module.level_4_算法练习.算法.双指针.左右指针;

import java.util.Arrays;

/**
 * @author By ZengPeng
 */
public class 力扣_344_反转字符串 {
    //测试
    public static void main(String[] args) {
        char[] chars = {'h', 'e', 'l', 'l', 'o' };
        new 力扣_344_反转字符串().reverseString(chars);
        System.out.println(Arrays.toString(chars));
    }

    /**
     * 题目：编写一个函数，其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
     * 不要给另外的数组分配额外的空间，你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
     *
     *示例 1：
     * 输入：s = ["h","e","l","l","o"]
     * 输出：["o","l","l","e","h"]
     *
     * 分析：【P ♥】
     *      1.左右指针最基础,两边互换值
     *
     * 边界值 & 注意点：
     *      1.
     **/
    public void reverseString(char[] s) {
        int left=0,right = s.length-1;
        while (left<right){
            s[left]^=s[right];
            s[right]^=s[left];
            s[left++]^=s[right--];
        }
        /*int n = s.length;
        for (int i = 0; i < n/2; i++) {
           int j = n-1-i;
           s[i]^=s[j];
           s[j]^=s[i];
           s[i]^=s[j];
        }*/
    }
}
